
module AndOr ( X, Y, A, B, C );
  input A, B, C;
  output X, Y;


  AND2X6 U1 ( .A(B), .B(A), .Y(X) );
  OR2X8 U2 ( .A(B), .B(C), .Y(Y) );
endmodule


module SR ( Q, Qn, S, R );
  input S, R;
  output Q, Qn;
  wire   n2;

  CLKNAND2X8 U2 ( .A(Q), .B(R), .Y(n2) );
  BUFX14 U1 ( .A(n2), .Y(Qn) );
  CLKNAND2X12 U3 ( .A(S), .B(n2), .Y(Q) );
endmodule


module XorNor ( X, Y, A, B, C );
  input A, B, C;
  output X, Y;
  wire   n2, n3, n4;

  INVX5 U1 ( .A(C), .Y(n4) );
  XNOR2X4 U2 ( .A(B), .B(n3), .Y(X) );
  CLKINVX12 U3 ( .A(A), .Y(n3) );
  XOR2X8 U4 ( .A(B), .B(n3), .Y(n2) );
  AND2X8 U5 ( .A(n2), .B(n4), .Y(Y) );
endmodule


module Intro_Top ( X, Y, Z, A, B, C, D );
  input A, B, C, D;
  output X, Y, Z;
  wire   n6, n7, qn, ab, bc, q, n2, n5;

  AndOr InputCombo01 ( .X(ab), .Y(bc), .A(A), .B(n5), .C(C) );
  SR SRLatch01 ( .Q(q), .Qn(qn), .S(bc), .R(n2) );
  XorNor OutputCombo01 ( .X(n6), .Y(n7), .A(ab), .B(q), .C(qn) );
  BUFX8 U2 ( .A(D), .Y(n2) );
  CLKINVX40 U3 ( .A(qn), .Y(Z) );
  CLKBUFX40 U4 ( .A(n7), .Y(Y) );
  BUFX8 U5 ( .A(B), .Y(n5) );
  CLKBUFX40 U6 ( .A(n6), .Y(X) );
endmodule

